﻿//using System;
//using System.Collections.Generic;
//using System.Data;
//using System.Linq.Expressions;
//using NiuX.Dapper.Querables;

//namespace NiuX.Dapper.Repositories;

//public class DapperRespository<T> where T : new()
//{
//    public T Entity { get; set; }

//    public IDbConnection Connection { get; set; }


//    protected string TableName { get; set; }


//    protected IDbQuerableContextModel<T> ContextModel => DbQuerable.ContextModel;

//    //public DbOperationable<T> Operationable { get; set; } = new();

//    public DbQuerable<T> DbQuerable { get; set; } = new();


//    public DapperRespository(string connectionString)
//    {
//        DbQuerable.ContextModel.ConnectionString = connectionString;
//    }

//    public DapperRespository(string connectionString, DatabaseType databaseType)
//    {
//        DbQuerable.ContextModel.ConnectionString = connectionString;
//        DbQuerable.ContextModel.DatabaseType = databaseType;
//    }

//    public DbQuerable<T> Where(Expression<Func<T, bool>> expression)
//    {
//        return DbQuerable.Where(expression);
//    }

//    public DbQuerable<T> OrderBy(string field)
//    {
//        //WhereExpression = expression;
//        return DbQuerable.OrderBy(field);
//    }

//    public DbQuerable<T> OrderBy(string[] fields)
//    {
//        //WhereExpression = expression;
//        return DbQuerable.OrderBy(fields);
//    }

//    public DbQuerable<T> OrderByDescending(string field)
//    {
//        return DbQuerable.OrderByDescending(field);
//    }


//    public DbQuerable<T> Select(Expression<Func<T, T>> expression)
//    {
//        return DbQuerable.Select(expression);
//    }


//    public DbQuerable<T, TResult> Select<TResult>(Expression<Func<T, TResult>> expression) where TResult : new()
//    {
//        return new DbQuerable<T, TResult>(DbQuerable, expression);
//    }

//    public DbQuerable<T> Select(string[] fields)
//    {
//        //WhereExpression = expression;
//        return DbQuerable.Select(fields);
//    }

//    public DbQuerable<T> Select(string field)
//    {
//        //WhereExpression = expression;
//        return DbQuerable.Select(field);
//    }

//    public DbQuerable<T> AsTable(string tableName)
//    {
//        //TableName = tableName;
//        return DbQuerable.AsTable(tableName);
//    }


//    public DapperRespository<T> AsCompanyId(int companyId)
//    {
//        DbQuerable.AsCompanyId(companyId);
//        return this;
//    }

//    public List<T> ToList()
//    {
//        return DbQuerable.ToList();

//        //return Operationable.ToList();
//    }

//    public int Update(T entity)
//    {
//        return DbQuerable.Update(entity);
//    }

//    public int Insert(T entity)
//    {
//        return DbQuerable.Insert(entity);
//    }

//    public int Insert(List<T> entities)
//    {
//        return DbQuerable.Insert(entities);
//    }
//}